home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / LGP250S1.ZIP / src / libgplus.5 / libgplus / tests / tllist.cc < prev    next >
C/C++ Source or Header  |  1991-06-28  |  5KB  |  236 lines

  1. /*
  2.  test/demo of linked structures
  3. */
  4.  
  5.  
  6. #include <assert.h>
  7.  
  8. #define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
  9.                        else _assert(#ex, __FILE__,__LINE__); }
  10.  
  11. #include <stream.h>
  12. #include "iSLList.h"
  13.  
  14.  
  15. void printlist(intSLList& l)
  16. {
  17.   for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
  18.   cout << "\n";
  19. }
  20.  
  21.  
  22. void SLtest()
  23. {
  24.   int i;
  25.   intSLList a;
  26.   assert(a.OK());
  27.   assert(a.empty());
  28.   cout << "prepending...\n";
  29.   for (i = 0; i < 10; ++i)
  30.   {
  31.     assert(a.length() == i);
  32.     a.prepend(i);
  33.     assert(a.front() == i);
  34.   }
  35.   cout << "a: "; printlist(a);
  36.   cout << "appending...\n";
  37.   for (i = 0; i < 10; ++i)
  38.   {
  39.     assert(a.length() == 10 + i);
  40.     a.append(i);
  41.     assert(a.rear() == i);
  42.   }
  43.   cout << "a: "; printlist(a);
  44.   intSLList b = a;
  45.   cout << "b = a: " << "\n"; printlist(b);
  46.   assert(b.OK());
  47.   assert(b.length() == a.length());
  48.   assert(b.front() == a.front());
  49.   assert(b.rear() == a.rear());
  50.   cout << "remove_front of first 10 elements:\n";
  51.   for (i = 0; i < 10; ++i) 
  52.   {
  53.     assert(b.length() == 20 - i);
  54.     assert(b.front() == 9 - i);
  55.     b.remove_front();
  56.   }
  57.   assert(b.length() == 10);
  58.   cout << "b: "; printlist(b);
  59.  
  60.   cout << "inserting 100 after sixth element...\n";
  61.   Pix bp = b.first();
  62.   for (i = 0; i < 5; ++i) b.next(bp);
  63.   b.ins_after(bp, 100);
  64.   assert(b.length() == 11);
  65.   cout << "b: "; printlist(b);
  66.   a.join(b);
  67.   cout << "after a.join(b)\n"; printlist(a);
  68.   assert(b.empty());
  69.   assert(a.length() == 31);
  70.   cout << "b: " << "\n"; printlist(b);
  71.   b.prepend(999);
  72.   cout << "b: " << "\n"; printlist(b);
  73.   assert(b.length() == 1);
  74.   assert(b.front() == 999);
  75.   assert(b.rear() == 999);
  76.   assert(b.OK());
  77.   intSLList bb = b;
  78.   cout << "bb: " << "\n"; printlist(bb);
  79.   assert(bb.OK());
  80.   assert(bb.length() == 1);
  81.   assert(bb.front() == 999);
  82.   assert(bb.rear() == 999);
  83.   assert(bb.remove_front() == 999);
  84.   b.prepend(1234);
  85.   assert(b.length() == 2);
  86.   b.del_after(b.first());
  87.   assert(b.rear() == 1234);
  88.   assert(b.length() == 1);
  89.   b.del_after(0);
  90.   assert(b.length() == 0);
  91.  
  92.   assert(a.OK());
  93.   assert(b.OK());
  94.   assert(bb.OK());
  95. }
  96.  
  97. #include "iDLList.h"
  98.  
  99. void printDlist(intDLList& l)
  100. {
  101.   for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
  102.   cout << "\n";
  103. }
  104.  
  105. void DLtest()
  106. {
  107.   int i;
  108.   intDLList a;
  109.   assert(a.OK());
  110.   assert(a.empty());
  111.   assert(a.length() == 0);
  112.   cout << "prepending...\n";
  113.   for (i = 0; i < 10; ++i)
  114.   {
  115.     assert(a.length() == i);
  116.     a.prepend(i);
  117.     assert(a.front() == i);
  118.   }
  119.   cout << "a: " << "\n"; printDlist(a);
  120.   cout << "appending...\n";
  121.   for (i = 0; i < 10; ++i)
  122.   {
  123.     assert(a.length() == 10 + i);
  124.     a.append(i);
  125.     assert(a.rear() == i);
  126.   }
  127.   cout << "a: "; printDlist(a);
  128.   intDLList b = a;
  129.   assert(b.OK());
  130.   assert(b.length() == a.length());
  131.   assert(b.front() == a.front());
  132.   assert(b.rear() == a.rear());
  133.   cout << "b = a: "; printDlist(b);
  134.   cout << "remove_front of first 10 elements:\n";
  135.   for (i = 0; i < 10; ++i) 
  136.   {
  137.     assert(b.length() == 20 - i);
  138.     assert(b.front() == 9 - i);
  139.     b.remove_front();
  140.   }
  141.   assert(b.length() == 10);
  142.   cout << "b: "; printDlist(b);
  143.  
  144.   cout << "inserting 100 after sixth element...\n";
  145.   Pix bp = b.first();
  146.   for (i = 0; i < 5; ++i) b.next(bp);
  147.   b.ins_after(bp, 100);
  148.   assert(b.length() == 11);
  149.   cout << "b: "; printDlist(b);
  150.   intDLList aa = a;
  151.   aa.join(b);
  152.   cout << "after aa = a; aa.join(b)\n"; printDlist(aa);
  153.   assert(aa.length() == 31);
  154.   assert(b.empty());
  155.   cout << "b: " << "\n"; printDlist(b);
  156.   b.prepend(999);
  157.   cout << "b: " << "\n"; printDlist(b);
  158.   assert(b.length() == 1);
  159.   assert(b.front() == 999);
  160.   assert(b.rear() == 999);
  161.   assert(b.OK());
  162.   intDLList bb = b;
  163.   cout << "bb: " << "\n"; printDlist(bb);
  164.   assert(bb.OK());
  165.   assert(bb.length() == 1);
  166.   assert(bb.front() == 999);
  167.   assert(bb.rear() == 999);
  168.   assert(bb.remove_front() == 999);
  169.   assert(bb.OK());
  170.   b.prepend(1234);
  171.   assert(b.length() == 2);
  172.   bp = b.first();
  173.   b.next(bp);
  174.   b.del(bp, -1);
  175.   assert(b.rear() == 1234);
  176.   assert(b.length() == 1);
  177.   b.del(bp);
  178.   assert(b.length() == 0);
  179.  
  180.   intDLList z = a;
  181.   cout << "z = a: "; printDlist(z);
  182.   assert(z.OK());
  183.   assert(z.length() == 20);
  184.   cout << "remove_rear of last 10 elements:\n";
  185.   for (i = 0; i < 10; ++i) 
  186.   {
  187.     assert(z.length() == 20 - i);
  188.     assert(z.rear() == 9 - i);
  189.     z.remove_rear();
  190.   }
  191.   assert(z.length() == 10);
  192.  
  193.   cout << "z: "; printDlist(z);
  194.  
  195.   cout << "inserting 100 before alternate elements...\n";
  196.   for (Pix zp = z.first(); zp; z.next(zp))
  197.   {
  198.     z.ins_before(zp, 100);
  199.   }
  200.   assert(z.length() == 20);
  201.   cout << "z: "; printDlist(z);
  202.  
  203.   cout << "inserting 200 after sixth element...\n";
  204.   zp = z.first();
  205.   for (i = 0; i < 5; ++i) z.next(zp);
  206.   z.ins_after(zp, 200);
  207.   assert(z.length() == 21);
  208.   cout << "z: "; printDlist(z);
  209.  
  210.   cout << "deleting alternate elements of z...";
  211.   for (zp = z.first(); zp; z.next(zp))
  212.   {
  213.     cout << z(zp) << " ";
  214.     z.del(zp);
  215.   }
  216.   cout << "\n";
  217.   assert(z.length() == 10);
  218.   cout << "z: "; printDlist(z);
  219.   
  220.   cout << "z in reverse order:\n";
  221.   for (zp = z.last(); zp; z.prev(zp)) cout << z(zp) << " ";
  222.   cout << "\n";
  223.   z.clear();
  224.   assert(z.OK());
  225.   assert(z.empty());
  226.   assert(a.OK());
  227.   assert(b.OK());
  228. }
  229.  
  230. main()
  231. {
  232.   SLtest();
  233.   DLtest();
  234.   cout << "\nEnd of test\n";
  235. }
  236.